shadow-box: Bail out blur early if radius is 1px
authorAlexander Larsson <alexl@redhat.com>
Fri, 20 Mar 2015 13:31:57 +0000 (14:31 +0100)
committerAlexander Larsson <alexl@redhat.com>
Sat, 21 Mar 2015 20:07:26 +0000 (21:07 +0100)
For radius 1px the current implementation rounds down to a 1 px box
filter which is a no-op. Rather than creating useless shadow masks
in this case we bail out blurring early.

Another alternative would be to make radius 1px round up to a 2 px box
filter, but that would change the rendering of Adwaita which is probably
not a great idea this late in the cycle.

https://bugzilla.gnome.org/show_bug.cgi?id=746468

gtk/gtkcairoblur.c
gtk/gtkcssshadowvalue.c

index 170f460bf2760bbe70e94197b7275cd57671f4ba..8d67c8c04ba22e2e68b0d4e947a049b5507d5ae6 100644 (file)
@@ -215,7 +215,9 @@ _gtk_cairo_blur_surface (cairo_surface_t* surface,
   g_return_if_fail (cairo_surface_get_type (surface) == CAIRO_SURFACE_TYPE_IMAGE);
   g_return_if_fail (cairo_image_surface_get_format (surface) == CAIRO_FORMAT_A8);
 
-  if (radius == 0)
+  /* The code doesn't actually do any blurring for radius 1, as it
+   * ends up with box filter size 1 */
+  if (radius <= 1)
     return;
 
   /* Before we mess with the surface, execute any pending drawing. */
index ae94f0214af8367821abfac9b27542061bac4707..0a307b31a81ce9d7ebe8f01a0c39d107d0f9840c 100644 (file)
@@ -297,7 +297,10 @@ static gboolean
 needs_blur (const GtkCssValue *shadow)
 {
   double radius = _gtk_css_number_value_get (shadow->radius, 0);
-  if (radius == 0.0)
+
+  /* The code doesn't actually do any blurring for radius 1, as it
+   * ends up with box filter size 1 */
+  if (radius <= 1.0)
     return FALSE;
 
   return TRUE;